home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’95 / ClockDoubler / ClockDoubler.c < prev    next >
C/C++ Source or Header  |  1995-06-24  |  1KB  |  66 lines

  1.  
  2. #include <Retrace.h>
  3.  
  4. void HackInit(void);
  5.  
  6. typedef    struct    myVBLRecord_t
  7.     {
  8.         VBLTask    myVBLTask;
  9.         long        count;
  10.     } myVBLRecord;
  11.     
  12.  
  13. void main(void)
  14. {
  15.     EventRecord    rec;
  16.         HackInit();
  17.         while (1)
  18.             WaitNextEvent(everyEvent, &rec, 0xffffffff, 0);
  19. }
  20.  
  21. #pragma parameter __A0 getA0()
  22. extern pascal long getA0()
  23.  ONEWORDINLINE(0x4e71);
  24.  
  25. void    myVBL();
  26. void    myVBL()
  27. {
  28.     myVBLRecord    *rec = (myVBLRecord    *)getA0();
  29.     if (++rec->count == 6)
  30.         {
  31.             unsigned    long    theTime;
  32.             OSErr    err;
  33.             GetDateTime(&theTime);
  34.             err = SetDateTime(theTime+1);
  35.             if (err)
  36.                 DebugStr("\pcould not get time");
  37.             rec->count = 0;
  38.         }
  39.     LMSetTicks(LMGetTicks()+9);
  40.     rec->myVBLTask.vblCount = 1;
  41. }
  42.  
  43. struct    jmpPtr
  44.     {
  45.         unsigned    short        jmp;
  46.                             VBLUPP    toWhere;
  47.     };
  48.  
  49. void HackInit(void)
  50. {
  51.     myVBLRecord        *rec = (myVBLRecord *)NewPtrSys(sizeof(myVBLRecord));
  52.     struct jmpPtr    *jmper = (struct jmpPtr*)NewPtrSys(sizeof(6));
  53.     OSErr                    myErr;
  54.     if (rec && jmper)
  55.         {
  56.             jmper->jmp = 0x4ef9;
  57.             jmper->toWhere = (VBLUPP)myVBL;
  58.             rec->count = 0;
  59.             rec->myVBLTask.qType = vType;
  60.             rec->myVBLTask.vblAddr = (VBLUPP)jmper;
  61.             rec->myVBLTask.vblCount = 1;
  62.             myErr = VInstall((QElemPtr)rec);
  63.             if (myErr)
  64.                 DebugStr("\pcould not install vbl task");
  65.         }
  66. }